package main

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

var fileSrc string = "./demo.txt"

// 利用Read()读取文件
func readFromFile() {
	// 打开文件
	fileObj, err := os.Open(fileSrc)
	// 错误处理
	if err != nil {
		fmt.Println("err", err)
		return
	}
	// 关闭文件
	defer fileObj.Close()
	for {
		// 读取文件
		var tmp = make([]byte, 128)
		n, err := fileObj.Read(tmp[:])
		// 读取到文件末尾
		if err == io.EOF {
			return
		}
		// 错误处理
		if err != nil {
			fmt.Println(err)
			return
		}
		// fmt.Println("此次读的字节数", n)
		fmt.Println(string(tmp[:n]))
		// 循环控制
		if n < 128 {
			return
		}
	}
}

// 利用Bufio读取文件
func readFromFileByBufio() {
	fileObj, err := os.Open(fileSrc)
	if err != nil {
		fmt.Println(err)
	}
	defer fileObj.Close()
	reader := bufio.NewReader(fileObj)
	for {
		line, err := reader.ReadString('\n')
		if err == io.EOF {
			return
		}
		if err != nil {
			fmt.Println(err)
		}
		fmt.Printf("line: %v\n", line)
	}
}

// 利用Bufio读取文件
func readFromFileByIoutil() {
	ret, err := ioutil.ReadFile(fileSrc)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("ret: %v\n", string(ret))

}

// 文件操作
func main() {
	// readFromFile()
	// readFromFileByBufio()
	readFromFileByIoutil()
}
